package com.richpencil.utils;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class NewImageUtils {  
    /** 
     *  
     * @Title: 构造图片 
     * @Description: 生成水印并返回java.awt.image.BufferedImage 
     * @param file 
     *            源文件(图片) 
     * @param waterFile 
     *            水印文件(图片) 
     * @param x 
     *            距离右下角的X偏移量 
     * @param y 
     *            距离右下角的Y偏移量 
     * @param alpha 
     *            透明度, 选择值从0.0~1.0: 完全透明~完全不透明 
     * @return BufferedImage 
     * @throws IOException
     */  
    public BufferedImage watermark(File file, File waterFile, int x, int y, float alpha) throws IOException {
        // 获取底图  
        BufferedImage buffImg = ImageIO.read(file);
        // 获取层图  
        BufferedImage waterImg = ImageIO.read(waterFile);
        // 创建Graphics2D对象，用在底图对象上绘图  
        Graphics2D g2d = buffImg.createGraphics();
        int waterImgWidth = waterImg.getWidth();// 获取层图的宽度  
        int waterImgHeight = waterImg.getHeight();// 获取层图的高度  
        // 在图形和图像中实现混合和透明效果  
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
        // 绘制  
        g2d.drawImage(waterImg, x, y, waterImgWidth, waterImgHeight, null);  
        g2d.dispose();// 释放图形上下文使用的系统资源  
        return buffImg;  
    }  
  
    /** 
     * 输出水印图片 
     *  
     * @param buffImg 
     *            图像加水印之后的BufferedImage对象 
     * @param savePath 
     *            图像加水印之后的保存路径 
     */  
    public void generateWaterFile(BufferedImage buffImg, String savePath) {
        int temp = savePath.lastIndexOf(".") + 1;  
        try {  
            ImageIO.write(buffImg, savePath.substring(temp), new File(savePath));
        } catch (IOException e1) {
            e1.printStackTrace();  
        }  
    }  
  

    
    /** 
     *  
     * @param args 
     * @throws IOException
     *             IO异常直接抛出了 
     * @author bls 
     */  
    public static void main(String[] args) throws IOException {
    	
    	
    	
    	
        String sourceFilePath = "d://back.jpg";
        String waterFilePath = "d:/20180207.jpg";
        String saveFilePath = "d://new.png";
        NewImageUtils newImageUtils = new NewImageUtils();  
        BufferedImage buffImg = newImageUtils.watermark(new File(sourceFilePath), new File(waterFilePath), 0, 550, 1.0f);
        newImageUtils.generateWaterFile(buffImg, saveFilePath);  
        
        
        
 
        Thumbnails.of(new File(sourceFilePath))
        .size(375, 677)
        .watermark(Positions.BOTTOM_LEFT,
                   ImageIO.read(new File(waterFilePath)), 0.8f)
        .toFile(new File(saveFilePath));
        
    }  
}  